// Формирует таблицу обслуживаемых объектов метаданных и их общие настройки.
//
// Возвращаемое значение:
//   ТаблицаЗначений - Заполняемый список, в котором устанавливаются:
//       * ПолноеИмя             - Строка   - Полное имя метаданных объекта-таблицы.
//       * ПредставлениеЭлемента - Строка   - Представление элемента для пользователя.
//       * ПредставлениеСписка   - Строка   - Представление списка для пользователя.
//       * Удален                - Булево   - Флаг того, что объект метаданных с префиксом "Удалить".
//       * СобытиеПараметрыПоискаДублей      - Булево - Флаг подписки на соответствующее событие.
//       * СобытиеПриПоискеДублей            - Булево - Флаг подписки на соответствующее событие.
//       * СобытиеВозможностьЗаменыЭлементов - Булево - Флаг подписки на соответствующее событие.
//
Функция НастройкиОбъектовМетаданных() Экспорт
	Настройки = Новый ТаблицаЗначений;
	Настройки.Колонки.Добавить("Вид", Новый ОписаниеТипов("Строка"));
	Настройки.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка"));
	Настройки.Колонки.Добавить("ПредставлениеЭлемента", Новый ОписаниеТипов("Строка"));
	Настройки.Колонки.Добавить("ПредставлениеСписка", Новый ОписаниеТипов("Строка"));
	Настройки.Колонки.Добавить("Удален", Новый ОписаниеТипов("Булево"));
	Настройки.Колонки.Добавить("СобытиеПараметрыПоискаДублей", Новый ОписаниеТипов("Булево"));
	Настройки.Колонки.Добавить("СобытиеПриПоискеДублей", Новый ОписаниеТипов("Булево"));
	Настройки.Колонки.Добавить("СобытиеВозможностьЗаменыЭлементов", Новый ОписаниеТипов("Булево"));

	ВсеПодключенныеСобытия = Новый Соответствие;
//	ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей(ВсеПодключенныеСобытия);

	ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, Метаданные.Справочники, "Справочник");
	ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, Метаданные.Документы, "Документ");
	ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, Метаданные.ПланыСчетов, "ПланСчетов");
	ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, Метаданные.ПланыВидовРасчета,
		"ПланВидовРасчета");

	Результат = Настройки.Скопировать(Новый Структура("Удален", Ложь));
	Результат.Сортировать("ПредставлениеСписка");

	Возврат Результат;
КонецФункции

Процедура ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, КоллекцияМетаданных, Вид)
	СтандартныеСвойства = Новый Структура("ПредставлениеОбъекта, РасширенноеПредставлениеОбъекта, ПредставлениеСписка, РасширенноеПредставлениеСписка");

	Для Каждого ОбъектМетаданных Из КоллекцияМетаданных Цикл
//		Если Не ПравоДоступа("Просмотр", ОбъектМетаданных)
//			Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Тогда
//			Продолжить; // Нет доступа, не выводим в список.
//		КонецЕсли;

		СтрокаТаблицы = Настройки.Добавить();
		СтрокаТаблицы.Вид = Вид;
		СтрокаТаблицы.ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
		СтрокаТаблицы.Удален = СтрНачинаетсяС(ОбъектМетаданных.Имя, "Удалить");

		ЗаполнитьЗначенияСвойств(СтандартныеСвойства, ОбъектМетаданных);
		Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеОбъекта) Тогда
			СтрокаТаблицы.ПредставлениеЭлемента = СтандартныеСвойства.ПредставлениеОбъекта;
		ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеОбъекта) Тогда
			СтрокаТаблицы.ПредставлениеЭлемента = СтандартныеСвойства.РасширенноеПредставлениеОбъекта;
		Иначе
			СтрокаТаблицы.ПредставлениеЭлемента = ОбъектМетаданных.Представление();
		КонецЕсли;
		Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеСписка) Тогда
			СтрокаТаблицы.ПредставлениеСписка = СтандартныеСвойства.ПредставлениеСписка;
		ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеСписка) Тогда
			СтрокаТаблицы.ПредставлениеСписка = СтандартныеСвойства.РасширенноеПредставлениеСписка;
		Иначе
			СтрокаТаблицы.ПредставлениеСписка = ОбъектМетаданных.Представление();
		КонецЕсли;

		События = ВсеПодключенныеСобытия[СтрокаТаблицы.ПолноеИмя];
		Если ТипЗнч(События) = Тип("Строка") Тогда
			Если ПустаяСтрока(События) Тогда
				СтрокаТаблицы.СобытиеПараметрыПоискаДублей      = Истина;
				СтрокаТаблицы.СобытиеПриПоискеДублей            = Истина;
				СтрокаТаблицы.СобытиеВозможностьЗаменыЭлементов = Истина;
			Иначе
				СтрокаТаблицы.СобытиеПараметрыПоискаДублей      = СтрНайти(События, "ПараметрыПоискаДублей") > 0;
				СтрокаТаблицы.СобытиеПриПоискеДублей            = СтрНайти(События, "ПриПоискеДублей") > 0;
				СтрокаТаблицы.СобытиеВозможностьЗаменыЭлементов = СтрНайти(События, "ВозможностьЗаменыЭлементов") > 0;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры